<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    let obj = {
      Architecture: 'amd64',
      Comment: '',
      Config: {
        Hostname: '6583e7cc6b64',
        Domainname: ''
      },
      arr: [1,2,3],
      arr1: [],
      arr2: [1, [2, 3]]
    }
    function formatObject (obj, indent = 2) {  
      const spaces = ' '.repeat(indent);  
      let str = '';  

      // 处理数组  
      if (Array.isArray(obj)) {  
          debugger
          // 空数组不换行  
          if (obj.length === 0) {  
              return '[]';  
          }  

          // 非空数组，每个元素都要检查是否需要换行  
          str += '[\n';  
          obj.forEach((item, index) => {  
              str += `${spaces}${indent === 0 ? '' : '    '}${formatObject(item, indent + 4)}`; // 数组内再嵌套数组时增加缩进  
              if (index < obj.length - 1) {  
                  str += ',\n'; // 数组元素之间添加逗号和换行  
              }  
          });  
          str += `\n${spaces}]`;  
      } else if (typeof obj === 'object' && obj !== null) {  
          debugger
          // 处理对象  
          // 如果对象为空（即没有属性），则直接返回'{}'  
          if (Object.keys(obj).length === 0) {  
              return '{}';  
          }  

          // 对象至少有一个属性，需要换行  
          str += '{\n';  
          for (let key in obj) {  
              if (obj.hasOwnProperty(key)) {  
                  const value = obj[key];  
                  str += `${spaces}${indent === 0 ? '' : '    '}${key}: ${formatObject(value, indent + 4)}`;  
                  str += ',\n'; // 对象属性之间添加逗号和换行  
              }  
          }  
          // 移除最后一个逗号和换行符，并添加闭合大括号  
          str = str.slice(0, -2) + `\n${spaces}}`;  
      } else {  
          debugger
          // 基本数据类型直接返回其字符串表示  
          return JSON.stringify(obj);  
      }  
      return str;  
    }
    console.log(formatObject(obj), 'formatObject(obj, )');
    
  </script>
</body>
</html>